package workflowEntity

// Node 节点
type Node struct {
	NodeId         string           `json:"nodeId"`   // 节点ID
	NodeName       string           `json:"nodeName"` // 节点名称
	Type           int              `json:"type"`     // 节点类型 0：开始节点 1：审批节点 2：抄送节点 3：条件节点 4：条件路由
	ApproveNode                     // 审批节点 仅当Type=1时有效
	ConditionNodes []*ConditionNode `json:"conditionNodes"` // 条件节点列表 仅当Type=4时有效
	ConditionNode                   // 条件节点 仅当Type=3时有效
	SendNode                        // 抄送节点 仅当Type=2时有效
	ChildNode      *Node            `json:"childNode"` // 子节点 type 1 2 3 时有效,如果为空说明没有子节点
}

// ApproveNode 审批节点
type ApproveNode struct {
	SetType       int         `json:"setType"`       // 审批人员类型 1:指定人员 2:主管 3:角色 4:发起人自选 5:发起人自己 7:连续多级主管
	NodeUserList  []*NodeUser `json:"nodeUserList"`  // type=1 节点用户列表
	NodeRoleList  []*NodeRole `json:"nodeRoleList"`  // type=3 节点角色列表
	ExamineLevel  int         `json:"examineLevel"`  // type=2 指定主管 - 发起人的第几级主管
	DirectorLevel int         `json:"directorLevel"` // type=2 连续主管审批终点 - 直到发起人的第几级主管
	SelectMode    int         `json:"selectMode"`    // type=4 发起人自选 - 选择方式 1:自选一个人 2:自选多个人
	TermAuto      bool        `json:"termAuto"`      // 超时自动审批
	Term          int         `json:"term"`          // 超时自动审批 - 超时时间，单位小时
	TermMode      int         `json:"termMode"`      // 超时自动审批 - 超时模式 0：自动通过 1：自动拒绝
	ExamineMode   int         `json:"examineMode"`   // 多人审批时审批方式 1 按顺序依次审批 2 会签 (可同时审批，每个人必须审批通过) 3 或签 (有一人审批通过即可)
	DirectorMode  int         `json:"directorMode"`  // 连续主管审批终点 0：直到最上层主管 1：自定义审批终点
}

// SendNode 抄送节点
type SendNode struct {
	UserSelectFlag bool `json:"userSelectFlag"` // 允许发起人自选抄送人
}

// ConditionNode 条件节点
type ConditionNode struct {
	PriorityLevel int              `json:"priorityLevel"` // 优先级
	ConditionMode int              `json:"conditionMode"` // 条件关系 1：且、2：或
	ConditionList []*ConditionItem `json:"conditionList"` // 条件列表
	ChildNode     *Node            `json:"childNode"`     // 条件节点下面的节点
}

type ConditionItem struct {
	Label    string `json:"label"`    // 条件名称、描述
	Field    string `json:"field"`    // 字段
	Operator string `json:"operator"` // 运算符
	Value    string `json:"value"`    // 值
}

type NodeUser struct {
	Id   string `json:"id"`   // 用户ID
	Name string `json:"name"` // 用户名称
}

type NodeRole struct {
	Id   string `json:"id"`   // 角色ID
	Name string `json:"name"` // 角色名称
}

// 节点类型
var NodeTypes = [...]int{0, 1, 2, 3, 4}

// ExecNodeInfo 执行的节点信息
type ExecNodeInfo struct {
	NodeId   string `json:"nodeId"`
	NodeName string `json:"nodeName"`
	Type     int    `json:"type"`
	//group
	Aprover     string `json:"approver"`
	AproverType int    `json:"aproverType"`
	MemberCount int8   `json:"memberCount"`
	ExamineMode int    `json:"examineMode"`
}
